package com.ruoyi.project.h265;

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.*;

public class StreamSender {
    public static void main(String[] args) throws Exception {
        String inputUrl = "C:\\Users\\admin\\Desktop\\视频相机测试工具\\码流测试工具\\stream-0.h265"; // 输入H.265流的URL
        String outputUrl = "rtmp://iot-test.wiot.tech:1017/myapp/stream66"; // 输出RTMP包的URL

        // 创建 FFmpegFrameGrabber 用于抓取 H.265 流
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputUrl);
        grabber.setVideoCodec(avcodec.AV_CODEC_ID_HEVC); // 设置视频编码器为H.265
        grabber.start();

        // 创建 FFmpegFrameRecorder 用于封装编码后的数据并推送到 RTMP 服务器
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputUrl, grabber.getImageWidth(), grabber.getImageHeight());
        recorder.setFormat("flv");
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_FLV1); // 设置视频编码器为H.264
        recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // 设置像素格式为YUV420P
        recorder.setVideoOption("preset", "ultrafast"); // 设置编码速度为超快
        recorder.setFrameRate(30); // 设置帧率
        recorder.setGopSize(30); // 设置关键帧间隔

        recorder.start();

        // 不断抓取 H.265 流并发送封装后的数据
        Frame frame;
        while ((frame = grabber.grab()) != null) {
            recorder.record(frame);
        }

        recorder.stop();
        grabber.stop();
    }
}
